package cn.imvc.app.models;

import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import cn.imvc.app.domains.GoodsQueryBean;
import cn.imvc.app.entities.Goods;

/**
 * goods service接口
 * 
 * @author lijibo
 *
 */
public interface GoodsModel {
	/**
	 * 固定分页大小
	 */
	public static final Integer PAGE_SIZE = 8;
	/**
	 * 固定分页大小
	 */
	public static final Integer PC_PAGE_SIZE = 16;
	/**
	 * 热销推荐显示条数
	 */
	public static final Integer PC_HOT_SALE_PAGE_SIZE = 6;

	/**
	 * 获取商品列表(分页)
	 * 
	 * @param brandId
	 * @param page
	 * @param sort
	 *            格式 col1_orderType1,col2_orderType2,...
	 * @return
	 */
	Page<Goods> findByBrandId(Integer brandId, Integer page, String sort);

	/**
	 * 根据分类获取商品
	 * 
	 * @param goodsClassId
	 * @param page
	 * @param sort
	 *            格式 col1_orderType1,col2_orderType2,...
	 * @return
	 */
	Page<Goods> findByGoodsClassId(Integer goodsClassId, Integer page, String sort);

	/**
	 * 根据主键获取商品
	 * 
	 * @param id
	 * @return
	 */
	Goods findById(Integer id);

	/**
	 * 根据分类获取商品和显示价格
	 * 
	 * @param goodsClassId
	 * @param page
	 * @param sort
	 *            格式 col1_orderType1,col2_orderType2,...
	 * @return
	 */
	Page<Object[]> findPageResult(Integer goodsClassId, Integer page, String sort);

	Goods get(int id);

	Goods save(Goods goods);

	void delete(int id);

	void retrySaveGoods(Integer goodsId, Integer click, Integer salenum, Integer collect, Integer evaluationCount);

	List<Object[]> findMaxId();

	/**
	 * 所有商品列表
	 * 
	 * @param page
	 * @param sort
	 * @return
	 */
	Page<Object[]> findAllPageResult(Integer page, String sort);

	/**
	 * 根据分类获取查询过滤
	 * 
	 * @param goodsClassId
	 * @return
	 */
	Map<String, Object> getSearchFilters(Integer goodsClassId);

	/**
	 * 根据查询参数 获取分页商品列表
	 * 
	 * @param goodsQueryBean
	 * @return
	 */
	Page<Object[]> findPageResult(GoodsQueryBean goodsQueryBean);

	/**
	 * 获取热销商品
	 * 
	 * @param limitNum
	 * @return
	 */
	List<Goods> findTopListOrderBySaleNum(Integer limitNum);

	/**
	 * 使用阿里云搜索商品
	 * 
	 * @param goodsQueryBean
	 * @return
	 */
	Page<Goods> cloudSearchGoods(GoodsQueryBean goodsQueryBean);
	/**
	 * 展示搜索参数
	 * @param goodsQueryBean
	 * @return
	 */
	GoodsQueryBean getShowParams(GoodsQueryBean goodsQueryBean);
	
	public List<Goods> getRalationGoods(Integer goodsId) throws Exception;
}
